package zhupf.test.designPattern.decorator;

/**
 *  装饰者模式
 *
 *  案例需求：
 *      星巴克咖啡订单项目：
 *      1、咖啡种类/单品咖啡：Espresso（意大利浓咖啡），ShortBlack，LongBlack(美式咖啡)，Decaf(无因咖啡)
 *      2、调料：Milk，Soy（豆浆），Chocolate
 *      3、要求在扩展新的咖啡种类的时候，具有良好的扩展性，改动方便，维护方便
 *      4、使用OO的来计算不同种类咖啡的费用，客户可以点单品咖啡，也可以单品咖啡+调料组合
 *    不用设计模式的写法：
 *      1、定义：一个单品咖啡的抽象类，属性：单价，描述，数量，方法：计算总价格
 *      2、定义：一个调料的抽象接类，属性：单价，描述，数量：方法：计算总价格
 *      3、定义一个总的方法：属性，单品咖啡的类，调料的类，方法，计算计算总价格
 */
public class Clinet {
    public static void main(String[] args) {
        // 一分无因咖啡 + 一分牛奶+两份豆浆
        Drink order = new Decaf();
        System.out.println(order.cost());

        order = new Milk(order);
        System.out.println(order.cost());

        order = new Soy(order);
        System.out.println(order.cost());

        order = new Soy(order);

        System.out.println(order.descript());
        System.out.println(order.cost());

    }
}
